home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1994-01-16 | 5.7 KB | 232 lines |
- Dim PL(3,8),SH(39,4),WL(29,4),F(21,25)
- Gosub INIT
- LE=3
- Gosub LADEN
- PL=3
- Hide
- Do
- Screen 0
- For P=0 To PL
- If Spritebob Col(P*2)
- For A=0 To PL*10+9
- If(A>P*10+9 or A<P*10) and Col(A)
- Boom : SH(A,0)=0
- PL(P,7)=Max(PL(P,7)-10,0)
- End If
- Next
- End If
- Next
- For P=0 To PL
- If PL(P,7)>0 Then Gosub COMPUTE Else Gosub EXLODE
- Gosub SHOTCONTROL
- Next
- Bob Draw
- Screen 1
- ' For P=0 To PL
- ' Locate 20*(P/2),P mod 2
- ' A$=Str$(PL(P,7))-" "
- ' Print "ENERGY ";String$("0",2-Len(A$));A$;
- ' A$=Str$(PL(P,8))-" "
- ' Print "% GUN ";String$("0",2-Len(A$));A$;"% ";
- ' Next
- FL=1-FL
- If WL Then Gosub ANI
- If SX Then Gosub BONUSANI
- If Rnd(20)=0 and SX=0 Then Gosub SETBONUS
- Screen Swap 0 : Wait Vbl : Bob Clear
- Loop
- End
- EXLODE:
- If PL(P,3)=32 Then Sprite Off P*2 : Return
- If PL(P,3)<7 Then PL(P,3)=8
- Sprite P*2,PL(P,0)+128,PL(P,1)+40,PL(P,3)-7
- Inc PL(P,3)
- Return
- COMPUTE:
- If PL(P,2)=0 Then RX=Jleft(1)-Jright(1) : RY=Jup(1)-Jdown(1) : FI=Fire(1)
- I=PL(P,3)
- Gosub DI
- Gosub COMV
- PL(P,3)=I : X=PL(P,0)+RX*2 : Y=PL(P,1)+RY*2
- Screen 2
- If Point(X+3,Y+7+RY*4)=1 Then RY=0
- If Point(X+11,Y+7+RY*4)=1 Then RY=0
- If Point(X+7+RX*4,Y+3)=1 Then RX=0
- If Point(X+7+RX*4,Y+11)=1 Then RX=0
- If F=7 and RX=0 Then PL(P,4)=-PL(P,4)
- If F=7 and RY=0 Then PL(P,5)=-PL(P,5)
- If F=10 and FL Then PL(P,7)=Min(PL(P,7)+1,99)
- If PL(P,6) Then Dec PL(P,6) Else If FI and F<>9 Then Gosub SHOT
- Add PL(P,0),RX*2 : Add PL(P,1),RY*2
- If FL Then PL(P,8)=Min(PL(P,8)+1,99)
- Sprite P*2,PL(P,0)+128,PL(P,1)+40,25+I+P*16+FL*8
- X=(PL(P,0)+7)/16 : Y=(PL(P,1)+7)/16
- If SA=30 and X=SX and Y=SY Then SA=31
- For A=0 To WL-1
- If WL(A,0)=X and WL(A,1)=Y Then Inc WL(A,4)
- Next
- Return
- DI:
- F=F((PL(P,0)+23)/16,(PL(P,1)+23)/16)
- If F=1 Then RY=-1 : Return
- If F=2 Then RY=1 : Return
- If F=3 Then RX=1 : Return
- If F=4 Then RX=-1 : Return
- If F=5 Then RY=PL(P,5) : Return
- If F=6 Then RX=PL(P,4) : Return
- If F=7 Then RX=PL(P,4) : RY=PL(P,5)
- Return
- COMV:
- If RX<>0 or RY<>0 Then PL(P,4)=RX : PL(P,5)=RY
- If RX=0 and RY=-1 Then I=0 : Return
- If RX=1 and RY=-1 Then I=1 : Return
- If RX=1 and RY=0 Then I=2 : Return
- If RX=1 and RY=1 Then I=3 : Return
- If RX=0 and RY=1 Then I=4 : Return
- If RX=-1 and RY=1 Then I=5 : Return
- If RX=-1 and RY=0 Then I=6 : Return
- If RX=-1 and RY=-1 Then I=7
- Return
- SHOTCONTROL:
- For A=P*10 To P*10+9
- If SH(A,0)
- For B=0 To 3
- RX=SH(A,2) : RY=SH(A,3)
- Add SH(A,0),RX : Add SH(A,1),RY
- X=SH(A,0) : Y=SH(A,1)
- If Point(X,Y)>0 : Gosub BOUNCH : End If
- Next
- If SH(A,4)=0 : SH(A,0)=0 : Else Dec SH(A,4) : End If
- End If
- Next
- Screen 0
- For A=P*10 To P*10+9
- If SH(A,0)
- Bob A,SH(A,0)-2,SH(A,1)-2,90+P
- Else
- Bob Off A
- End If
- Next
- Return
- SETBONUS:
- SX=Rnd(19) : SY=Rnd(15)
- If F(SX+1,SY+1)>0 Then SX=0 : Return
- SA=18
- Return
- BONUSANI:
- If SA=38 Then SA=0
- Screen 1
- Put Block SA+1,SX*16,SY*16
- If SA=30 Then Return
- If SA=0 Then SX=0 : Return
- Inc SA
- Return
- BOUNCH:
- SH(A,4)=Max(SH(A,4)-5,0)
- If Point(X-1,Y-1)>0 and Point(X+1,Y+1)>0 Then SH(A,2)=RY : SH(A,3)=RX : Return
- If Point(X+1,Y-1)>0 and Point(X-1,Y+1)>0 Then SH(A,2)=-RY : SH(A,3)=-RX : Return
- If Point(X-1,Y)>0 and Point(X+1,Y)>0 Then SH(A,3)=-RY : Return
- If Point(X,Y-1)>0 and Point(X,Y-1)>0 Then SH(A,2)=-RX : Return
- SH(A,2)=-RX : SH(A,3)=-RY
- Return
- SHOT:
- If PL(P,8)<10 Then Return
- For A=P*10 To P*10+9
- If SH(A,0)=0
- PL(P,6)=5 : Shoot
- Add PL(P,8),-10
- SH(A,0)=X+7 : SH(A,1)=Y+7
- SH(A,2)=PL(P,4) : SH(A,3)=PL(P,5)
- SH(A,4)=200 : Exit
- End If
- Next
- Return
- ANI:
- For A=0 To WL-1
- WL(A,4)=Max(WL(A,4)-1,0)
- If WL(A,4)=0
- F=WL(A,2)
- Add F,WL(A,3)
- WL(A,4)=1
- If F=18 or F=10
- F=WL(A,2) : WL(A,3)=-WL(A,3) : WL(A,4)=40
- End If
- WL(A,2)=-F
- Put Block F+1,WL(A,0)*16,WL(A,1)*16
- End If
- Next
- Screen 2
- For A=0 To WL-1
- If WL(A,2)<0
- Put Block 100-WL(A,2),WL(A,0)*16,WL(A,1)*16
- WL(A,2)=-WL(A,2)
- End If
- Next
- Return
- LADEN:
- If Exist("Dh2:AMOS/Projekte/TankAction/TankLevels/"+Str$(LE)-" ")=0 Then Boom : Return
- Erase 10 : Reserve As Data 10,328
- Bload "Dh2:AMOS/Projekte/TankAction/TankLevels/"+Str$(LE)-" ",Start(10)
- ST=Start(10)
- For A=0 To 3
- PL(A,0)=Peek(ST+A*2)*16
- PL(A,1)=Peek(ST+A*2+1)*16
- PL(A,7)=99
- PL(A,8)=99
- Next
- Screen 1
- WL=0
- For Y=0 To 15
- For X=0 To 19
- F=Peek(ST+Y*20+X+8)
- F(X+1,Y+1)=F
- If F>10 and F<18 Then WL(WL,0)=X : WL(WL,1)=Y : WL(WL,2)=F : WL(WL,3)=1 : Inc WL
- Put Block 1+F,X*16,Y*16
- Next
- Next
- Screen 2
- For Y=0 To 15
- For X=0 To 19
- Put Block F(X+1,Y+1)+100,X*16,Y*16
- Next
- Next
- Return
- INIT:
- Screen Open 0,320,256,8,0 : Screen Hide 0
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- Make Mask
- Screen Display 0,128,40,,
- For Y=0 To 9
- For X=0 To 9
- Paste Bob X*32,Y*32,89
- Next
- Next
- Wait Vbl
- Double Buffer
- Autoback 0
- Bob Update Off
- Unpack 8 To 2 : Screen Hide 2
- For A=0 To 79
- Get Block A+100,(A mod 20)*16,(A/20)*16,16,16
- Next
- Screen Open 2,320,256,4,0 : Screen Hide 2
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- Unpack 9 To 1 : Screen Hide 1
- For A=0 To 79
- Get Block A+1,(A mod 20)*16,(A/20)*16,16,16
- Next
- Screen 0 : Get Palette 1
- Get Sprite Palette
- For A=0 To 15 : Colour A+16,Colour(A) : Next
- For A=0 To 7 : Colour A+8,Colour(A) : Next
- Palette 0,$888,$666,$444,$F0,$F00,$FF0,$444
- Screen Open 1,320,256,8,0
- Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
- Screen Display 1,128,40,,
- For A=0 To 31 : Colour A,0 : Next
- Fade 4 To 0
- Screen 0
- Screen Show 0
- Dual Playfield 0,1
- Dual Priority 1,0
- Return